/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cgt;

import cdp.Cliente;
import cgd.DAO;
import cgd.DAOFactory;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Rodrigo
 */
public class AplCadastrarCliente {
    DAO dao = DAOFactory.getDAOFactory(DAOFactory.defaultFactory).getDAO(Cliente.class);
    
    private static AplCadastrarCliente instance = null;
    
    public static AplCadastrarCliente getInstance() {
        if (instance == null) {
            instance = new AplCadastrarCliente();
        }
        return instance;
    }
    
    public void incluirCliente(List<Object> lista){
        Cliente cliente = new Cliente();
        String nome = (String) lista.get(0);
        int idade = (Integer) lista.get(1);
        String endereco = (String) lista.get(2);
        String senha = (String) lista.get(3);
                
        cliente.setNome(nome);
        cliente.setIdade(idade);
        cliente.setEndereco(endereco);
        cliente.setSenha(senha);
        
        cliente.setDataCadastro(new Date());
        
        try {
            dao.salvar(cliente);
        } catch (Exception ex) {                  
            Logger.getLogger(AplCadastrarCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void excluir(Cliente cliente){
        try {
            dao.excluir(cliente);
        } catch (Exception ex) {
            Logger.getLogger(AplCadastrarCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void alterarCliente(List<Object> lista){
        Cliente cliente = new Cliente();
        long id = (Long) lista.get(4);
        String nome = (String) lista.get(0);
        int idade = (Integer) lista.get(1);
        String endereco = (String) lista.get(2);
        String senha = (String) lista.get(3);
                
        cliente.setId(id);
        cliente.setNome(nome);
        cliente.setIdade(idade);
        cliente.setEndereco(endereco);
        cliente.setSenha(senha);
        
        try {
            dao.alterar(cliente);
        } catch (Exception ex) {
            Logger.getLogger(AplCadastrarCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public Cliente consultar(Cliente cliente){
        try {
            
            cliente = (Cliente) dao.obter(cliente);
        } catch (Exception ex) {
            Logger.getLogger(AplCadastrarCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        return cliente;
    }
    
    public Cliente consultar(Cliente cliente, long id){
        try {
            
            cliente = (Cliente) dao.obter(cliente, id);
            return cliente;
        } catch (Exception ex) {
            Logger.getLogger(AplCadastrarCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
    
    public List<Cliente> consultarTodos(Cliente cliente){
        List<Cliente> lista = new ArrayList<Cliente>();
        
        try {
            lista = dao.obterTodos(cliente);
            return lista;
        } catch (Exception ex) {
            Logger.getLogger(AplCadastrarCliente.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
    }
    
    public Cliente autenticarSenha(String login, String senha){
        try {
            List<Cliente> lista = consultarTodos(Cliente.class.newInstance());
            
            for (Cliente cliente : lista) {
                if (cliente.getNome().equals(login) && cliente.getSenha().equals(senha)) {
                    return cliente;
                }
            }
        } catch (InstantiationException ex) {
            Logger.getLogger(AplCadastrarCliente.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(AplCadastrarCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
}
